package bsh.dyn;

/**
 * A {@link Parameter} represents a type
 * 
 * @author takeshi
 */
public interface Parameter {

    /**
     * @return <code>true</code> if this represents a primitive
     */
    boolean isPrimitive();

    /**
     * @return <code>true</code> if this represents a primitive wrapper type
     */
    boolean isPrimitiveWrapper();

    /**
     * @return the underlying java type
     */
    Class<?> getJavaType();

    /**
     * Determines if this {@link Parameter} is a superclass of the given {@link Parameter}. Also works if this {@link Parameter} is an
     * interface and the given parameter implements it.
     * 
     * @param another {@link Parameter}
     * @return boolean
     */
    boolean isSuperClassOf(Parameter another);

}
